package com.zhn;

import java.util.HashMap;
import java.util.Map;

/**
 * 给你一个整数数组 nums 和一个整数 k ，请你统计并返回 该数组中和为 k 的子数组的个数 。
 * 子数组是数组中元素的连续非空序列。
 *
 * 示例 1：
 * 输入：nums = [1,1,1], k = 2
 * 输出：2
 * 示例 2：
 *
 * 输入：nums = [1,2,3], k = 3
 * 输出：2
 */
public class SubarraySum {
    public int subarraySum(int[] nums, int k) {
        int count = 0;
        int sum = 0;
        Map<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        for(int i = 0; i < nums.length; i++){
            sum+=nums[i];
            //为0就说明之前出现过复合条件的值
            if(map.containsKey(sum-k))
                //如果map中包含键值(sum-k)，说明之前出现过和为(sum-k)的子数组，将其出现次数加到计数器count中
                count+=map.get(sum - k);
           // 将键值对(sum, map.getOrDefault(sum,0) + 1)添加到map中，表示和为sum出现的次数加1
            map.put(sum,map.getOrDefault(sum,0) + 1);
        }
        return count;
    }
}
